<?php
namespace app\index\model;

/**
 * 引入模型基类
 */
use think\Model;

/**
 * 点赞模型类
 * 负责处理留言点赞相关的数据库操作
 */
class Like extends Model
{
    /**
     * 设置数据表名
     * @var string
     */
    protected $table = 'mb_like';
    
    /**
     * 自动写入时间戳设置
     * @var string 时间格式为datetime类型
     */
    protected $autoWriteTimestamp = 'datetime';
    
    /**
     * 创建时间字段
     * @var string
     */
    protected $createTime = 'create_time';
    
    /**
     * 更新时间字段设为false，表示不自动写入更新时间
     * @var boolean
     */
    protected $updateTime = false;

    /**
     * 关联用户表
     * 定义点赞与用户的多对一关联关系
     * 
     * @return \think\model\relation\BelongsTo
     */
    public function user()
    {
        return $this->belongsTo('User', 'user_id');
    }

    /**
     * 关联留言表
     * 定义点赞与留言的多对一关联关系
     * 
     * @return \think\model\relation\BelongsTo
     */
    public function message()
    {
        return $this->belongsTo('Message', 'message_id');
    }

    /**
     * 点赞操作
     * 创建新的点赞记录
     * 
     * @param int $messageId 留言ID
     * @param int $userId 用户ID
     * @return array 操作结果
     */
    public function doLike($messageId, $userId)
    {
        // 检查用户是否已对该留言点赞
        $like = $this->where([
            'message_id' => $messageId,
            'user_id' => $userId
        ])->find();

        // 如果已点赞，返回错误信息
        if ($like) {
            return ['status' => 0, 'msg' => '已经点赞过了'];
        }

        // 创建新的点赞记录
        $this->message_id = $messageId;
        $this->user_id = $userId;

        // 保存点赞记录并返回结果
        if ($this->save()) {
            return ['status' => 1, 'msg' => '点赞成功'];
        }
        return ['status' => 0, 'msg' => '点赞失败'];
    }

    /**
     * 取消点赞操作
     * 删除已有的点赞记录
     * 
     * @param int $messageId 留言ID
     * @param int $userId 用户ID
     * @return array 操作结果
     */
    public function cancelLike($messageId, $userId)
    {
        // 查找用户对该留言的点赞记录
        $like = $this->where([
            'message_id' => $messageId,
            'user_id' => $userId
        ])->find();

        // 如果未点赞，返回错误信息
        if (!$like) {
            return ['status' => 0, 'msg' => '还没有点赞'];
        }

        // 删除点赞记录并返回结果
        if ($like->delete()) {
            return ['status' => 1, 'msg' => '取消点赞成功'];
        }
        return ['status' => 0, 'msg' => '取消点赞失败'];
    }

    /**
     * 获取点赞数量
     * 统计指定留言的点赞总数
     * 
     * @param int $messageId 留言ID
     * @return int 点赞数量
     */
    public function getLikeCount($messageId)
    {
        // 统计指定留言的点赞记录数
        return $this->where('message_id', $messageId)->count();
    }

    /**
     * 检查用户是否已点赞
     * 判断用户是否对指定留言已点赞
     * 
     * @param int $messageId 留言ID
     * @param int $userId 用户ID
     * @return boolean 是否已点赞
     */
    public function hasLiked($messageId, $userId)
    {
        // 查找用户对该留言的点赞记录，返回是否存在
        return $this->where([
            'message_id' => $messageId,
            'user_id' => $userId
        ])->find() ? true : false;
    }
} 